package ar.edu.caece.compiler.grammars.sample2.tokens;

import ar.edu.caece.compiler.grammars.sample2.tokens.NumToken.NumTokenVisitor;

public class EoFToken extends SampleToken{

	public static interface EoFTokenVisitor extends TokenVisitorInterface {
		public SampleGrammarSymbol eofCase(EoFToken eoFToken, SampleGrammarSymbol param);
	}
	
	public static abstract class EoFTokenChainVisitor implements EoFTokenVisitor {
		private TokenVisitorInterface siguiente;
		protected EoFTokenChainVisitor(TokenVisitorInterface siguienteVisitor) {
			siguiente = siguienteVisitor;
		}
		
		public SampleGrammarSymbol defaultCase(NumToken llamador, SampleGrammarSymbol param) throws Exception {
			return llamador.execute(siguiente, param);
		}
	}
	
	@Override
	public SampleGrammarSymbol execute(TokenVisitorInterface visitor, SampleGrammarSymbol param) throws Exception {
		System.out.println("Entrando al visitor de EoF con " + visitor.getClass());
		return (visitor instanceof EoFTokenVisitor)? ((EoFTokenVisitor) visitor).eofCase(this, param):
			visitor.defaultCase(this, param);
		
	}

	@Override
	public String getRepresentation() {
		return "$";
	}

}
